package cn.qdhlm.collectservice.core.component.command;

import cn.qdhlm.collectservice.common.Constant;
import cn.qdhlm.collectservice.common.util.CodeUtil;
import cn.qdhlm.collectservice.common.util.ComUtil;
import cn.qdhlm.collectservice.common.util.JsonUtil;
import cn.qdhlm.collectservice.model.dto.CommandParamDTO;
import io.netty.buffer.ByteBuf;
import io.netty.buffer.Unpooled;
import lombok.extern.log4j.Log4j2;

/**
 * @Name: CmdAfn00
 * @Description: 确认∕否认（AFN=00H）
 * @Author: jiangcs
 */
@Log4j2
public class CmdAfn00 {
    /**
     * 按数据单元标识确认和否认
     *
     * @param commandParamDTO
     * @return
     */
    public static ByteBuf f3(CommandParamDTO commandParamDTO) {
        ByteBuf byteBuf = Unpooled.buffer(9);
        // DT=> F3
        byteBuf.writeShort(0x0400);
        // SN（被确认的SN）
        byteBuf.writeShort(commandParamDTO.getConfirmSn());
        // AFN（要被确认的报文的AFN）
        byteBuf.writeByte(CodeUtil.hexStringToByte(commandParamDTO.getConfirmAfn(), 0));
        // 数据单元标识（要被确认的报文的数据单元标识）: DA
        byteBuf.writeShort(commandParamDTO.getConfirmDa());
        // 数据单元标识（要被确认的报文的数据单元标识）: DT
        byteBuf.writeShort(commandParamDTO.getConfirmDt());
        return Unpooled.wrappedBuffer(packDefault(commandParamDTO.getDeviceType()), byteBuf);
    }

    /**
     * 命令包：默认
     *
     * @param deviceType
     * @return
     */
    private static ByteBuf packDefault(int deviceType) {
        ByteBuf byteBuf = Unpooled.buffer(10);
        // 控制域
        byteBuf.writeByte(0x00);
        // 设备类型
        byteBuf.writeByte(deviceType);
        // 协议版本
        byteBuf.writeShort(0x0100);
        // 主站地址和组地址
        byteBuf.writeShort(0x0000);
        // AFN=00：确认
        byteBuf.writeByte(0x00);
        // 帧序列域SEQ(保留0xff)
        byteBuf.writeByte(0xFF);
        // 信息点DA(暂时使用0x00,0x00)
        byteBuf.writeShort(0x0000);
        return byteBuf;
    }
}
